Si escribes código nativo y te preocupa su uso de memoria, es útil generar perfiles de las asignaciones nativas de tu app para descubrir si hay oportunidades de optimización.
Por qué debes generar perfiles para la memoria de tu app
Android proporciona un entorno de memoria administrada. Cuando Android determina que tu app ya no usa algunos objetos, el recolector de elementos no utilizados libera la memoria que no se usó para devolverla al montón. La forma en la que Android busca memoria sin usar se somete a optimizaciones constantes. Sin embargo, en algún punto de todas las versiones de Android, el sistema debe pausar brevemente tu código. La mayoría de las veces, las pausas son imperceptibles. Sin embargo, si tu app asigna memoria a una velocidad que supera la que el sistema es capaz de alcanzar para recolectarla, tu app puede experimentar una demora mientras el recolector libera suficiente memoria para satisfacer tus asignaciones. La demora podría hacer que tu app omitiera marcos y causara una lentitud visible.
Para obtener más información sobre prácticas de programación que pueden reducir el uso de memoria de tu app, consulta Cómo administrar la memoria de tu app.
Descripción general de las asignaciones nativas
Cuando ejecutas la tarea Hacer un seguimiento del consumo de memoria (asignaciones nativas), el Generador de perfiles de Android Studio realiza un seguimiento de las asignaciones y desasignaciones de objetos en código nativo durante el período que especifiques y proporciona la siguiente información:
- Allocations: Es un recuento de objetos asignados con
malloc()
o el operadornew
durante el período seleccionado. - Deallocations: Es un recuento de objetos desasignados mediante
free()
o el operadordelete
durante el período seleccionado. - Allocations Size: Es el tamaño total en bytes de todas las asignaciones durante el período seleccionado.
- Deallocations Size: Es el tamaño agregado en bytes de toda la memoria liberada durante el período seleccionado.
- Total Count: Es el valor de la columna Allocations menos el valor de la columna Deallocations.
- Remaining Size: Es el valor de la columna Allocations Size menos el valor de Deallocations Size.
La pestaña Visualización muestra una vista agregada de todos los objetos relacionados con el código nativo en la pila de llamadas durante el período seleccionado. Básicamente, te muestra cuánta memoria total ocupa la pila de llamadas con las instancias que se muestran. En la primera fila, se muestra el nombre del subproceso. De forma predeterminada, los objetos se apilan de izquierda a derecha según el tamaño de asignación. Usa el menú desplegable para cambiar el orden.
De forma predeterminada, el generador de perfiles usa un tamaño de muestra de 2,048 bytes: se toma una instantánea de la memoria cada vez que se asignan 2,048 bytes de memoria. Cuanto más pequeño sea el tamaño de muestra, más frecuentes serán las instantáneas, lo que generará datos más precisos sobre el uso de la memoria. Cuanto más grande sea el tamaño de muestra, menos precisos serán los datos generados, pero se consumirán menos recursos del sistema y mejorará el rendimiento durante la grabación. Para cambiar el tamaño de la muestra, consulta Cómo editar la configuración de grabación.